تطبيق عملي لتعلم جانغو – الجزء السابع: استيثاق المستخدمين وأذوناتهم
يعد استيثاق المستخدمين وإدارة الأذونات جزءاً أساسياً في أي تطبيق ويب يتطلب التفاعل مع المستخدمين. يعد هذا الأمر بالغ الأهمية لضمان الأمان وتحقيق تحكم كامل في من يمكنه الوصول إلى البيانات والوظائف المختلفة في التطبيق. في هذا المقال، سوف نغطي كيفية تنفيذ استيثاق المستخدمين وإدارة الأذونات باستخدام Django، وهو أحد أشهر أطر العمل في Python. سنبدأ بتوضيح كيفية إعداد استيثاق المستخدمين، ثم سننتقل إلى كيفية إنشاء صلاحيات مخصصة للمستخدمين، وكيفية التحكم في الوصول إلى أجزاء معينة من التطبيق بناءً على هذه الأذونات.
1. مقدمة عن استيثاق المستخدمين في Django
في Django، تأتي ميزة استيثاق المستخدمين بشكل مدمج ضمن إطار العمل. يتضمن ذلك الأنظمة التي تساعد على إنشاء حسابات المستخدمين، تسجيل الدخول، تسجيل الخروج، واستعادة كلمة المرور. كما يوفر Django نظام أذونات مرن، مما يسمح لك بتحديد الصلاحيات المختلفة للمستخدمين استنادًا إلى الأدوار أو متطلبات أخرى.
يتضمن النظام المدمج في Django نموذجًا للمستخدم يُسمى User، والذي يحتوي على عدة حقول مهمة مثل username و password و email وغيرها. يوفر Django أيضًا مجموعة من الأدوات المدمجة لإدارة هذه العمليات بسهولة.
2. إعداد استيثاق المستخدمين في Django
لبدء استخدام استيثاق المستخدمين في Django، يجب أولاً التأكد من أن تطبيقك يحتوي على الإعدادات المناسبة. يتم إعداد نظام الاستيثاق عبر تمكين تطبيقات Django المدمجة التي توفر وظائف الاستيثاق.
2.1 إعداد django.contrib.auth
تأكد من أنك قد أضفت تطبيق django.contrib.auth إلى قائمة التطبيقات المثبتة في ملف الإعدادات settings.py. بالإضافة إلى ذلك، من المهم أيضًا أن يتم إضافة تطبيق django.contrib.contenttypes و django.contrib.sessions، حيث تعتمد العديد من وظائف الاستيثاق على هذه التطبيقات.
pythonINSTALLED_APPS = [
# تطبيقات Django الأساسية
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.messages',
'django.contrib.staticfiles',
]
2.2 نموذج المستخدم في Django
Django يأتي بنموذج مستخدم افتراضي يدعى User الذي يحتوي على الحقول الأساسية مثل:
-
username: اسم المستخدم الفريد. -
password: كلمة المرور المشفرة. -
email: البريد الإلكتروني للمستخدم. -
first_nameوlast_name: الأسماء الشخصية. -
is_active: يشير إلى ما إذا كان الحساب نشطًا أم لا. -
is_staff: يشير إلى ما إذا كان المستخدم لديه حق الوصول إلى واجهة الإدارة.
لاستعمال نموذج المستخدم المدمج، يمكننا ببساطة استخدامه كما هو أو تخصيصه حسب الحاجة. على سبيل المثال، يمكننا إضافة حقول إضافية مثل رقم الهاتف أو تاريخ الميلاد.
2.3 إنشاء حساب مستخدم جديد
لإنشاء حساب مستخدم جديد، يمكن استخدام الدالة create_user() المدمجة، والتي تتيح لك إنشاء مستخدم مع كلمة مرور مشفرة بشكل آمن.
pythonfrom django.contrib.auth.models import User
user = User.objects.create_user(username='newuser', password='password123')
2.4 تسجيل الدخول وتسجيل الخروج
يمكن لمستخدمي تطبيق Django تسجيل الدخول باستخدام نموذج AuthenticationForm، والذي يوفره Django بشكل مدمج. لإنشاء صفحة لتسجيل الدخول، يمكننا استخدام النموذج LoginView المدمج.
pythonfrom django.contrib.auth.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(), name='login'),
]
أما بالنسبة لتسجيل الخروج، يمكن استخدام عرض LogoutView، الذي يتيح للمستخدمين تسجيل الخروج بسهولة:
pythonfrom django.contrib.auth.views import LogoutView
urlpatterns = [
path('logout/', LogoutView.as_view(), name='logout'),
]
3. إدارة الأذونات في Django
إدارة الأذونات في Django تسمح لك بتحديد من يمكنه الوصول إلى ما داخل التطبيق. يوفر Django نظام أذونات مرن جدًا من خلال Permissions و Groups التي يمكن استخدامها لتحديد صلاحيات المستخدمين. يمكن تخصيص الأذونات على مستوى نماذج معينة أو على مستوى التطبيق بالكامل.
3.1 الأذونات المدمجة في Django
Django يوفر مجموعة من الأذونات المدمجة مثل:
-
add_: يسمح بإضافة كائنات للنموذج. -
change_: يسمح بتعديل كائنات من النموذج. -
delete_: يسمح بحذف كائنات من النموذج. -
view_: يسمح بعرض كائنات من النموذج.
على سبيل المثال، إذا كان لدينا نموذج Article، فإن الأذونات المدمجة ستكون:
-
add_article -
change_article -
delete_article -
view_article
يمكن التحقق من هذه الأذونات باستخدام الدالة has_perm().
pythonuser.has_perm('myapp.add_article')
3.2 إدارة الأذونات عبر المجموعات
يمكن أيضًا تجميع الأذونات في مجموعات لتسهيل إدارة الأذونات للمستخدمين. باستخدام Group، يمكن تعيين مجموعة من الأذونات لمجموعة من المستخدمين.
لإنشاء مجموعة جديدة وتعيين أذونات لها:
pythonfrom django.contrib.auth.models import Group, Permission
# إنشاء مجموعة جديدة
group = Group.objects.create(name='Editors')
# تعيين أذونات للمجموعة
permission = Permission.objects.get(codename='add_article')
group.permissions.add(permission)
ثم يمكن إضافة المستخدمين إلى هذه المجموعة:
pythonuser.groups.add(group)
3.3 استخدام الأذونات المخصصة
في بعض الأحيان، قد تحتاج إلى تخصيص الأذونات حسب احتياجات التطبيق. لتخصيص الأذونات، يمكن إنشاء أذونات مخصصة بسهولة عبر النموذج Permission.
على سبيل المثال، إذا أردنا إنشاء إذن مخصص يسمى can_publish_article، يمكننا تعريفه على النحو التالي:
pythonfrom django.contrib.auth.models import Permission
permission = Permission.objects.create(
codename='can_publish_article',
name='Can Publish Article',
content_type=ContentType.objects.get_for_model(Article)
)
ثم يمكن تعيين هذا الإذن لمستخدم معين كما فعلنا مع الأذونات الأخرى.
4. التحقق من الأذونات في العرض
بعد أن تم إعداد الأذونات للمستخدمين، يمكن التحقق من الأذونات قبل السماح لهم بالوصول إلى صفحة معينة أو إجراء عملية معينة في التطبيق. يمكن استخدام الدالة user.has_perm() للتحقق مما إذا كان المستخدم يملك الإذن.
على سبيل المثال، للتحقق مما إذا كان المستخدم يمكنه إضافة مقال:
pythonif user.has_perm('myapp.add_article'):
# السماح للمستخدم بإضافة المقال
else:
# إظهار رسالة خطأ أو إعادة توجيه
يمكن أيضًا استخدام الزخارف (decorators) مثل permission_required لتطبيق هذه الأذونات بسهولة على العروض.
pythonfrom django.contrib.auth.decorators import permission_required
@permission_required('myapp.add_article')
def create_article(request):
# عملية إضافة المقال
5. إدارة الأذونات في واجهة الإدارة
يوفر Django واجهة إدارة قوية لتمكين المديرين من إدارة الأذونات للمستخدمين بسهولة. في واجهة الإدارة، يمكن لكل مستخدم إدارة الأذونات التي يمتلكها، وكذلك تعيين الأذونات للمجموعات.
لإضافة الأذونات في واجهة الإدارة، يمكن تعديل ModelAdmin الخاص بكل نموذج ليشمل الأذونات:
pythonfrom django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'author']
search_fields = ['title']
permissions = ['add_article', 'change_article', 'delete_article']
admin.site.register(Article, ArticleAdmin)
6. خاتمة
تعد إدارة استيثاق المستخدمين والأذونات من العناصر الأساسية لبناء تطبيقات ويب آمنة باستخدام Django. من خلال استخدام الأدوات المدمجة مثل User و Permission و Group، يمكن للمطورين توفير طرق مرنة وآمنة للتعامل مع المستخدمين والتحكم في الوصول إلى البيانات والوظائف. بفضل هذا النظام، يمكن للمطورين تحديد صلاحيات المستخدمين بدقة استنادًا إلى احتياجات التطبيق، مما يعزز الأمان ويقلل من المخاطر المتعلقة بالوصول غير المصرح به.

